#!/bin/bash

# XappTool 部署配置脚本
# 用于快速配置不同环境的域名和API端点

set -e

echo "=== XappTool 部署配置工具 ==="
echo

# 检查参数
if [ $# -eq 0 ]; then
    echo "用法: $0 <environment> [options]"
    echo
    echo "环境选项:"
    echo "  development  - 开发环境"
    echo "  staging      - 测试环境" 
    echo "  production   - 生产环境"
    echo
    echo "可选参数:"
    echo "  --api-domain <domain>      - API域名"
    echo "  --merchant-domain <domain> - 商户前台域名"
    echo "  --landing-domain <domain>  - 落地页域名"
    echo "  --sdk-domain <domain>      - SDK域名"
    echo "  --help                     - 显示帮助信息"
    exit 1
fi

ENVIRONMENT=$1
shift

# 默认域名配置
API_DOMAIN=""
MERCHANT_DOMAIN=""
LANDING_DOMAIN=""
SDK_DOMAIN=""

# 解析可选参数
while [[ $# -gt 0 ]]; do
    case $1 in
        --api-domain)
            API_DOMAIN="$2"
            shift 2
            ;;
        --merchant-domain)
            MERCHANT_DOMAIN="$2"
            shift 2
            ;;
        --landing-domain)
            LANDING_DOMAIN="$2"
            shift 2
            ;;
        --sdk-domain)
            SDK_DOMAIN="$2"
            shift 2
            ;;
        --help)
            echo "详细帮助信息..."
            exit 0
            ;;
        *)
            echo "未知参数: $1"
            exit 1
            ;;
    esac
done

# 根据环境设置默认域名
case $ENVIRONMENT in
    development)
        API_DOMAIN=${API_DOMAIN:-"http://localhost:8787"}
        MERCHANT_DOMAIN=${MERCHANT_DOMAIN:-"http://localhost:5176"}
        LANDING_DOMAIN=${LANDING_DOMAIN:-"http://localhost:5177"}
        SDK_DOMAIN=${SDK_DOMAIN:-"http://localhost:5179"}
        ;;
    staging)
        API_DOMAIN=${API_DOMAIN:-"https://api-staging.xapptool.cn"}
        MERCHANT_DOMAIN=${MERCHANT_DOMAIN:-"https://merchant-staging.xapptool.cn"}
        LANDING_DOMAIN=${LANDING_DOMAIN:-"https://landing-staging.xapptool.cn"}
        SDK_DOMAIN=${SDK_DOMAIN:-"https://sdk-staging.xapptool.cn"}
        ;;
    production)
        API_DOMAIN=${API_DOMAIN:-"https://api.xapptool.cn"}
        MERCHANT_DOMAIN=${MERCHANT_DOMAIN:-"https://merchant.xapptool.cn"}
        LANDING_DOMAIN=${LANDING_DOMAIN:-"https://landing.xapptool.cn"}
        SDK_DOMAIN=${SDK_DOMAIN:-"https://sdk.xapptool.cn"}
        ;;
    *)
        echo "错误: 未知环境 '$ENVIRONMENT'"
        echo "支持的环境: development, staging, production"
        exit 1
        ;;
esac

echo "配置环境: $ENVIRONMENT"
echo "API域名: $API_DOMAIN"
echo "商户前台域名: $MERCHANT_DOMAIN"
echo "落地页域名: $LANDING_DOMAIN"
echo "SDK域名: $SDK_DOMAIN"
echo

# 更新前端配置文件
echo "正在更新前端配置文件..."
cat > config.js << EOF
/**
 * XappTool Configuration File
 * 用于管理域名、API端点和其他部署相关配置
 * 支持源码交付时的快速配置
 */

const config = {
  // $ENVIRONMENT 环境配置
  $ENVIRONMENT: {
    // 前端域名配置
    frontend: {
      merchant: '$MERCHANT_DOMAIN',      // 商户前台
      landing: '$LANDING_DOMAIN',       // 落地页
      admin: '$API_DOMAIN'          // 管理后台
    },
    
    // API域名配置
    api: {
      base: '$API_DOMAIN',           // API基础域名
      merchant: '$API_DOMAIN/api',  // 商户API
      tracking: '$API_DOMAIN/api',   // 追踪API
      upload: '$API_DOMAIN/api'      // 上传API
    },
    
    // SDK配置
    sdk: {
      web: '$SDK_DOMAIN/web',   // Web SDK路径
      uniapp: '$SDK_DOMAIN/uniapp', // UniApp SDK路径
      react: '$SDK_DOMAIN/react'    // React SDK路径
    }
  }
};

// 获取当前环境
const env = process.env.NODE_ENV || '$ENVIRONMENT';

// 导出配置
module.exports = {
  env,
  config: config[env],
  
  // 获取指定环境的配置
  getConfig(environment = env) {
    return config[environment] || config.$ENVIRONMENT;
  },
  
  // 获取API基础URL
  getApiBaseUrl(environment = env) {
    return this.getConfig(environment).api.base;
  },
  
  // 获取商户前台URL
  getMerchantUrl(environment = env) {
    return this.getConfig(environment).frontend.merchant;
  },
  
  // 获取SDK URL
  getSdkUrl(sdkType, environment = env) {
    const sdkConfig = this.getConfig(environment).sdk;
    return sdkConfig[sdkType] || sdkConfig.web;
  }
};
EOF

# 更新商户前端配置文件
echo "正在更新商户前端配置文件..."
cat > merchant/src/config/index.js << EOF
// 全局配置文件
// 用于管理API域名、SDK路径等配置
// 支持不同环境的快速切换

const globalConfig = {
  // $ENVIRONMENT 环境
  $ENVIRONMENT: {
    API_BASE_URL: '$API_DOMAIN',
    SDK_BASE_URL: '$SDK_DOMAIN',
    MERCHANT_URL: '$MERCHANT_DOMAIN',
    LANDING_URL: '$LANDING_DOMAIN'
  }
};

// 获取当前环境
const env = import.meta.env.MODE || '$ENVIRONMENT';

// 导出当前环境的配置
export const config = globalConfig[env] || globalConfig.$ENVIRONMENT;

// SDK路径配置
export const sdkPaths = {
  web: \`\${config.SDK_BASE_URL}/web/xapptool.js\`,
  uniapp: \`\${config.SDK_BASE_URL}/uniapp/xapptool.js\`,
  react: \`\${config.SDK_BASE_URL}/react/xapptool.js\`,
  android: \`\${config.SDK_BASE_URL}/android/XappToolAndroid.java\`,
  ios: \`\${config.SDK_BASE_URL}/ios/XappTooliOS.swift\`
};

// API端点配置
export const apiEndpoints = {
  auth: {
    login: \`\${config.API_BASE_URL}/auth/login\`,
    register: \`\${config.API_BASE_URL}/auth/register\`,
    logout: \`\${config.API_BASE_URL}/auth/logout\`,
    profile: \`\${config.API_BASE_URL}/auth/profile\`
  },
  apps: {
    list: \`\${config.API_BASE_URL}/apps/list\`,
    create: \`\${config.API_BASE_URL}/apps/create\`,
    update: \`\${config.API_BASE_URL}/apps/update\`,
    delete: \`\${config.API_BASE_URL}/apps/delete\`,
    detail: \`\${config.API_BASE_URL}/apps/detail\`
  },
  stats: {
    overview: \`\${config.API_BASE_URL}/stats/overview\`,
    detail: \`\${config.API_BASE_URL}/stats/detail\`,
    export: \`\${config.API_BASE_URL}/stats/export\`
  },
  tracking: {
    device: \`\${config.API_BASE_URL}/device/track\`,
    event: \`\${config.API_BASE_URL}/device/event\`,
    attribution: \`\${config.API_BASE_URL}/device/attribution\`,
    landing: \`\${config.API_BASE_URL}/landing/track\`
  }
};

// 默认分享配置
export const shareConfig = {
  title: '免邀请码安装 - XappTool',
  description: '专业的免邀请码安装追踪解决方案',
  image: \`\${config.MERCHANT_URL}/assets/share-image.png\`,
  url: config.MERCHANT_URL
};

// 应用商店配置
export const appStores = {
  appstore: {
    name: 'App Store',
    placeholder: 'https://apps.apple.com/app/idYOUR_APP_ID',
    help: '在App Store中找到您的应用，复制URL中的ID数字'
  },
  googleplay: {
    name: 'Google Play',
    placeholder: 'https://play.google.com/store/apps/details?id=YOUR_PACKAGE_NAME',
    help: '在Google Play中找到您的应用，复制完整的包名'
  },
  huawei: {
    name: '华为应用市场',
    placeholder: 'https://appgallery.huawei.com/app/CYOUR_APP_ID',
    help: '在华为应用市场中找到您的应用，复制URL'
  },
  xiaomi: {
    name: '小米应用商店',
    placeholder: 'https://app.mi.com/details?id=YOUR_PACKAGE_NAME',
    help: '在小米应用商店中找到您的应用，复制包名'
  },
  oppo: {
    name: 'OPPO软件商店',
    placeholder: 'https://store.oppomobile.com/product/YOUR_PRODUCT_ID.html',
    help: '在OPPO软件商店中找到您的应用，复制产品ID'
  },
  vivo: {
    name: 'vivo应用商店',
    placeholder: 'https://dev.vivo.com.cn/product/productinfo?id=YOUR_PRODUCT_ID',
    help: '在vivo应用商店中找到您的应用，复制产品ID'
  },
  honour: {
    name: '荣耀应用市场',
    placeholder: 'https://ag.hihonor.com/app/CYOUR_APP_ID',
    help: '在荣耀应用市场中找到您的应用，复制URL'
  },
  yyb: {
    name: '应用宝',
    placeholder: 'https://sj.qq.com/myapp/detail.htm?apkName=YOUR_PACKAGE_NAME',
    help: '在应用宝中找到您的应用，复制包名'
  }
};

// 获取配置的工具函数
export const getConfig = () => config;
export const getApiUrl = (endpoint) => {
  const parts = endpoint.split('.');
  let current = apiEndpoints;
  for (const part of parts) {
    current = current[part];
    if (!current) return null;
  }
  return current;
};
export const getSdkUrl = (type) => sdkPaths[type];
export const getAppStore = (store) => appStores[store];

export default {
  config,
  sdkPaths,
  apiEndpoints,
  shareConfig,
  appStores,
  getConfig,
  getApiUrl,
  getSdkUrl,
  getAppStore
};
EOF

# 更新后端配置文件
echo "正在更新后端配置文件..."
cat > webman/config/xapptool.php << EOF
<?php
/**
 * XappTool Configuration
 * 全局配置文件，管理域名、API端点等
 * 支持源码交付时的快速配置
 */

return [
    // $ENVIRONMENT 环境
    '$ENVIRONMENT' => [
        'frontend' => [
            'merchant' => '$MERCHANT_DOMAIN',
            'landing' => '$LANDING_DOMAIN',
            'admin' => '$API_DOMAIN'
        ],
        'api' => [
            'base' => '$API_DOMAIN',
            'merchant' => '$API_DOMAIN',
            'tracking' => '$API_DOMAIN',
            'upload' => '$API_DOMAIN'
        ],
        'sdk' => [
            'web' => '$SDK_DOMAIN/web',
            'uniapp' => '$SDK_DOMAIN/uniapp',
            'react' => '$SDK_DOMAIN/react',
            'android' => '$SDK_DOMAIN/android',
            'ios' => '$SDK_DOMAIN/ios'
        ]
    ],
    
    // 默认配置
    'default' => [
        // 应用商店配置
        'app_stores' => [
            'appstore' => [
                'name' => 'App Store',
                'placeholder' => 'https://apps.apple.com/app/idYOUR_APP_ID',
                'help' => '在App Store中找到您的应用，复制URL中的ID数字'
            ],
            'googleplay' => [
                'name' => 'Google Play',
                'placeholder' => 'https://play.google.com/store/apps/details?id=YOUR_PACKAGE_NAME',
                'help' => '在Google Play中找到您的应用，复制完整的包名'
            ],
            'huawei' => [
                'name' => '华为应用市场',
                'placeholder' => 'https://appgallery.huawei.com/app/CYOUR_APP_ID',
                'help' => '在华为应用市场中找到您的应用，复制URL'
            ],
            'xiaomi' => [
                'name' => '小米应用商店',
                'placeholder' => 'https://app.mi.com/details?id=YOUR_PACKAGE_NAME',
                'help' => '在小米应用商店中找到您的应用，复制包名'
            ],
            'oppo' => [
                'name' => 'OPPO软件商店',
                'placeholder' => 'https://store.oppomobile.com/product/YOUR_PRODUCT_ID.html',
                'help' => '在OPPO软件商店中找到您的应用，复制产品ID'
            ],
            'vivo' => [
                'name' => 'vivo应用商店',
                'placeholder' => 'https://dev.vivo.com.cn/product/productinfo?id=YOUR_PRODUCT_ID',
                'help' => '在vivo应用商店中找到您的应用，复制产品ID'
            ],
            'honour' => [
                'name' => '荣耀应用市场',
                'placeholder' => 'https://ag.hihonor.com/app/CYOUR_APP_ID',
                'help' => '在荣耀应用市场中找到您的应用，复制URL'
            ],
            'yyb' => [
                'name' => '应用宝',
                'placeholder' => 'https://sj.qq.com/myapp/detail.htm?apkName=YOUR_PACKAGE_NAME',
                'help' => '在应用宝中找到您的应用，复制包名'
            ]
        ],
        
        // 分享配置
        'share' => [
            'title' => '免邀请码安装 - XappTool',
            'description' => '专业的免邀请码安装追踪解决方案',
            'image' => '/assets/share-image.png'
        ],
        
        // 安全配置
        'security' => [
            'cors_origins' => ['*'], // CORS允许的域名
            'rate_limit' => [
                'window' => 60, // 时间窗口（秒）
                'max_requests' => 100 // 最大请求数
            ]
        ],
        
        // 数据库配置
        'database' => [
            'default_timezone' => 'Asia/Shanghai',
            'date_format' => 'Y-m-d H:i:s'
        ],
        
        // 缓存配置
        'cache' => [
            'device_info_ttl' => 180 * 24 * 3600, // 设备信息缓存时间（秒）
            'stats_ttl' => 300, // 统计数据缓存时间（秒）
            'attribution_ttl' => 180 * 24 * 3600 // 归因数据缓存时间（秒）
        ]
    ]
];
EOF

echo "配置文件更新完成！"
echo
echo "下一步建议:"
echo "1. 重新构建前端项目: cd merchant && npm run build"
echo "2. 重启后端服务: cd webman && php start.php restart"
echo "3. 验证配置是否生效"
echo
echo "注意: 请确保域名已正确解析到服务器IP地址"